package the.offer.DesignPattern.creational.Singleton;

/**
 * 静态内部类：基于类初始化的线程安全、延迟加载解决方案
 * 原理：类初始化阶段（加载后、被线程使用之前）JVM会获取类初始化锁（同步多个线程对类的初始化）
 * TODO: static 关键字、静态内部类、类加载机制
 */
public class StaticInnerClassSingleton {
    /**
     * 关键：内部静态类的初始化锁！
     */
    private static class InnerClass {
        private static StaticInnerClassSingleton staticInnerClassSingleton = new StaticInnerClassSingleton();
    }

    public static StaticInnerClassSingleton getInstance() {
        return InnerClass.staticInnerClassSingleton;
    }

    private StaticInnerClassSingleton() {} // 必须要有私有构造器！否则外部可以创建该对象！
}
